from flask import *
from flask_sqlalchemy import *
import os


class Config:
    DEBUG = True
    APP_PATH = os.path.dirname(__file__)
    SQLALCHEMY_DATABASE_URI = 'mysql://root:123@127.0.0.1:3306/study'
    SQLALCHEMY_TRACK_MODIFICATIONS = True


app = Flask(__name__)
app.config.from_object(Config)   # 先指定配置类
db = SQLAlchemy(app)  # 创建数据库链接
# 多对多关系中的两个表之间的一个关联表
association_table = db.Table('association', db.metadata,
                             db.Column('author_id', db.Integer, db.ForeignKey('author.id')),
                             db.Column('book_id', db.Integer, db.ForeignKey('book.id'))
                             )


class Author(db.Model):
    """ 创建作者模型类"""
    # 指定表名，如果没有指定将默认使用模型类的名称
    tablename = 'author'
    # id 类型是整数 主键列
    id = db.Column(db.Integer, primary_key=True)
    # name 类型是可变长字符串，唯一
    name = db.Column(db.String(20), unique=True)
    # 关联中间表，不是数据库中真实存在的字段，而是为了方便查询添加的属性
    book = db.relationship('Book', back_populates='author', secondary=association_table)


class Book(db.Model):
    """创建书模型类"""
    # 指定表名，如果不指定将使用模型类名称作为表名
    tablename = 'book'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))
    # 关联中间表，不是数据库中真实存在的字段，而是为了方便查询添加的属性
    author = db.relationship("Author", secondary=association_table, back_populates="book")


if __name__ == '__main__':
    db.create_all()
